Block device write-verify test.
authoremellor@leeni.uk.xensource.com <emellor@leeni.uk.xensource.com>
Thu, 1 Jun 2006 10:47:00 +0000 (11:47 +0100)
committeremellor@leeni.uk.xensource.com <emellor@leeni.uk.xensource.com>
Thu, 1 Jun 2006 10:47:00 +0000 (11:47 +0100)
This test imports a ram disk device as a physical device into a domU.
The domU initialises the ram disk with data from /dev/urandom and
calculates the md5 checksum of the data (using tee as it is written so as to
avoid reading it back from the device which might potentially mask
problems).
The domU is stopped and the md5 checksum of the data on the device is
calculated by dom0.  The test succeeds if the checksums match, indicating
that all the data written by domU was sucessfully committed to the
device.

This patch also enables tee in BusyBox on the ramdisk and increments the
xm-test version number to 0.8.0.

The patch also installs the block-integrity tests in the default test
set so they get executed.

Signed-off-by: Harry Butterworth <butterwo@uk.ibm.com>
Signed-off-by: Ewan Mellor <ewan@xensource.com>
tools/xm-test/configure.ac
tools/xm-test/grouptest/default
tools/xm-test/ramdisk/configs/busybox
tools/xm-test/tests/block-integrity/02_block_device_write_verify.py [new file with mode: 0644]
tools/xm-test/tests/block-integrity/Makefile.am

index 1049751110b473176353e079d4ba30f885ddaf0c..96ef23a398e6de44df24e30650795eb2c8becc5a 100644 (file)
@@ -1,7 +1,7 @@
 # xm-test configure.ac input script
 
 # Basic header information
-AC_INIT([xm-test], [0.7.1])
+AC_INIT([xm-test], [0.8.0])
 AM_INIT_AUTOMAKE([1.7 foreign])
 
 # Check for dependencies
index 1b831232631d25810bde929d1a9e636a91b1f8b7..8aa94017577c0e2d180574bbecb77f3399880e2b 100644 (file)
@@ -1,6 +1,7 @@
 block-create
 block-destroy
 block-list
+block-integrity
 console
 create
 destroy
index 29c885d281c8418676677b48603d4857b0392f10..480d8f423992965b9932ecf2060121d6b5a8e6ae 100644 (file)
@@ -127,8 +127,8 @@ CONFIG_STTY=y
 CONFIG_SYNC=y
 CONFIG_TAIL=y
 CONFIG_FEATURE_FANCY_TAIL=n
-CONFIG_TEE=n
-CONFIG_FEATURE_TEE_USE_BLOCK_IO=n
+CONFIG_TEE=y
+CONFIG_FEATURE_TEE_USE_BLOCK_IO=y
 CONFIG_TEST=y
 
 #
diff --git a/tools/xm-test/tests/block-integrity/02_block_device_write_verify.py b/tools/xm-test/tests/block-integrity/02_block_device_write_verify.py
new file mode 100644 (file)
index 0000000..e212724
--- /dev/null
@@ -0,0 +1,63 @@
+#!/usr/bin/python
+
+# Copyright (C) International Business Machines Corp., 2006
+# Author: Harry Butterworth <butterwo@uk.ibm.com>
+
+# This test imports a ram disk device as a physical device into a domU.
+# The domU initialises the ram disk with data from /dev/urandom and calculates
+# the md5 checksum of the data (using tee as it is written so as to avoid
+# reading it back from the device which might potentially mask problems).
+# The domU is stopped and the md5 checksum of the data on the device is
+# calculated by dom0.  The test succeeds if the checksums match, indicating
+# that all the data written by domU was sucessfully committed to the device.
+
+import re
+
+from XmTestLib import *
+from XmTestLib.block_utils import *
+
+if ENABLE_HVM_SUPPORT:
+    SKIP("Block-attach not supported for HVM domains")
+
+domain = XmTestDomain()
+
+try:
+    console = domain.start()
+except DomainError, e:
+    FAIL(str(e))
+
+console.setHistorySaveCmds(value=True)
+
+block_attach(domain, "phy:ram1", "hda1")
+
+console.setTimeout(120)
+
+try:
+    run = console.runCmd("dd if=/dev/urandom bs=512 count=`cat /sys/block/hda1/size` | tee /dev/hda1 | md5sum")
+except ConsoleError, e:
+    FAIL(str(e))
+
+domU_md5sum_match = re.search(r"^[\dA-Fa-f]{32}", run["output"])
+
+domain.closeConsole()
+
+domain.stop()
+
+s, o = traceCommand("md5sum /dev/ram1")
+
+dom0_md5sum_match = re.search(r"^[\dA-Fa-f]{32}", o)
+
+if domU_md5sum_match == None:
+    FAIL("Failed to get md5sum of data written in domU.")
+
+if dom0_md5sum_match == None:
+    FAIL("Failed to get md5sum of data read back in dom0.")
+
+if verbose:
+    print "md5sum domU:"
+    print domU_md5sum_match.group()
+    print "md5sum dom0:"
+    print dom0_md5sum_match.group()
+
+if domU_md5sum_match.group() != dom0_md5sum_match.group():
+    FAIL("MISCOMPARE: data read in dom0 did not match data written by domU.")
index c1d4b9cc7cf07493eff15cc03ce1a8a1cf288712..572812d6af611a67027a999738df8719fe2636b1 100644 (file)
@@ -1,7 +1,8 @@
 
 SUBDIRS =
 
-TESTS = 01_block_device_read_verify.test
+TESTS = 01_block_device_read_verify.test \
+        02_block_device_write_verify.test
 
 XFAIL_TESTS =